package BusinessLayer;

import java.util.ArrayList;

import PersistanceLayer.AbstractDAOFactory;

/**
 * Semestre est la classe qui fait reference a une annee et contenant des UE 
 * @author cyrene
 *
 */
public class Semestre {

	/**
	 * le code semestre d une annee
	 */
  private String codeSemestre;

  /**
   * le libelle du semestre
   */
  private String libelleSemestre;

  /**
   * le nombre d ue qui devront etre facultative dans le semestre
   */
  private String nbUefacul;
  
  
  /**
   * Liste des UE contenues dans le semestre courant
   */
  private ArrayList<UE> ensUEs = new ArrayList<UE>();
  
/**
 * constructeur du semestre
 * @param codeSemestre
 */
    public Semestre ( String codeSemestre){
    	this.codeSemestre=codeSemestre;
    	this.chargementEnsembleUE();
    }
    public Semestre ( String codeSemestre, String libelleSemestre, String nbUefacul){
    	this.codeSemestre=codeSemestre;
    	this.libelleSemestre=libelleSemestre;
    	this.nbUefacul=nbUefacul;    	
    }
    
    
    public Annee myAnnee;
    
    public ArrayList<Etudiant>  myEtudiant;
    
    public ArrayList<UE> myUE;
        
    //public Etudiant MoyenneSemestre;
    
	public ArrayList<UE> getEnsUE() {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * setter du code sdu semestre
	 * @param codeSemestre
	 */
	public void setCodeSemestre(String codeSemestre) {
		this.codeSemestre = codeSemestre;
	}

	/**
	 * getter du code sdu semestre
	 * @return le code du semestre
	 */
	public String getCodeSemestre() {
		return codeSemestre;
	}

	/**
	 * setter du libelle
	 * @param libelleSemestre
	 */
	public void setLibelleSemestre(String libelleSemestre) {
		this.libelleSemestre = libelleSemestre;
	}

	/**
	 * getter du libelle
	 * @return renvoi le libelle
	 */
	public String getLibelleSemestre() {
		return libelleSemestre;
	}

	/**
	 * setter du nombre d ue optionnelle
	 * @param nbUefacul
	 */
	public void setNbUefacul(String nbUefacul) {
		this.nbUefacul = nbUefacul;
	}

	/**
	 * getter du nombre d ue optionnelle
	 * @return
	 */
	public String getNbUefacul() {
		return nbUefacul;
	}

	
	public void chargementEnsembleUE() {
		this.ensUEs = AbstractDAOFactory.getFactory(0).getUEDAO().getListe(this.getCodeSemestre());
		
	}

	
	public String toString(){
		return "le nom du semestre: "+ codeSemestre;
	}
	
	/**
	 * 
	 * @return les libell�s des UE de l'objet semestre courant
	 */
	public ArrayList<String> getEnsNomsUE()
	{
		ArrayList<String> res = new ArrayList<String>();
		
		for(int i=0;i<this.ensUEs.size();i++)
		{
			res.add(this.ensUEs.get(i).getCodeUE());
		}
		
		return res;
	}
	
	
	/**
	 * pr�-requis : il existe dans la liste des UE du semestre
	 * une UE dont le libelle correspond au libelle d'UE donn�
	 * @param nomUe est le libelle d'une UE
	 * @return l'objet UE dont le libelle correspond au libelle d'UE donn�
	 */
	public UE getUe(String nomUe) {
		int i=0;
		
		while(i<this.ensUEs.size() && !this.ensUEs.get(i).getCodeUE().equals(nomUe))
			i++;
		return this.ensUEs.get(i);
	}



}